Avoid segfault for selectable tab labels (even without a segfault, they
authorMatthias Clasen <matthiasc@src.gnome.org>
Sat, 9 Feb 2002 22:12:04 +0000 (22:12 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sat, 9 Feb 2002 22:12:04 +0000 (22:12 +0000)
* gtk/gtknotebook.c (gtk_notebook_set_focus_child): Avoid segfault
for selectable tab labels (even without a segfault, they make the
notebook almost unusable, though).  (#69985)

* gtk/gtkmenuitem.c (gtk_menu_item_set_accel_path): Silently do
nothing if the parent is not a menu.  (#66492)

* gtk/gtkitemfactory.c (gtk_item_factory_from_widget,
gtk_item_factory_path_from_widget): Try fetching the return value
from menu_item->submenu as a fallback.  (#69020)

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkitemfactory.c
gtk/gtkmenuitem.c
gtk/gtknotebook.c

index f00169ecfc5f99cc43fc5119d9cbd73281ba0c4f..47d8a1525293dc90e28ff8afc54716f508e82a27 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2002-02-09  Matthias Clasen  <matthias@local>
+
+       * gtk/gtknotebook.c (gtk_notebook_set_focus_child): Avoid segfault
+       for selectable tab labels (even without a segfault, they make the
+       notebook almost unusable, though).  (#69985)
+
+2002-02-08  Matthias Clasen  <matthias@local>
+
+       * gtk/gtkmenuitem.c (gtk_menu_item_set_accel_path): Silently do 
+       nothing if the parent is not a menu.  (#66492)
+
+2002-02-06  Matthias Clasen  <matthiasc@poet.de>
+
+       * gtk/gtkitemfactory.c (gtk_item_factory_from_widget,
+       gtk_item_factory_path_from_widget): Try fetching the return value 
+       from menu_item->submenu as a fallback.  (#69020)
+       
 Sat Feb  9 22:57:43 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreemodelsort.c (gtk_tree_model_sort_build_level): convert
index f00169ecfc5f99cc43fc5119d9cbd73281ba0c4f..47d8a1525293dc90e28ff8afc54716f508e82a27 100644 (file)
@@ -1,3 +1,20 @@
+2002-02-09  Matthias Clasen  <matthias@local>
+
+       * gtk/gtknotebook.c (gtk_notebook_set_focus_child): Avoid segfault
+       for selectable tab labels (even without a segfault, they make the
+       notebook almost unusable, though).  (#69985)
+
+2002-02-08  Matthias Clasen  <matthias@local>
+
+       * gtk/gtkmenuitem.c (gtk_menu_item_set_accel_path): Silently do 
+       nothing if the parent is not a menu.  (#66492)
+
+2002-02-06  Matthias Clasen  <matthiasc@poet.de>
+
+       * gtk/gtkitemfactory.c (gtk_item_factory_from_widget,
+       gtk_item_factory_path_from_widget): Try fetching the return value 
+       from menu_item->submenu as a fallback.  (#69020)
+       
 Sat Feb  9 22:57:43 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreemodelsort.c (gtk_tree_model_sort_build_level): convert
index f00169ecfc5f99cc43fc5119d9cbd73281ba0c4f..47d8a1525293dc90e28ff8afc54716f508e82a27 100644 (file)
@@ -1,3 +1,20 @@
+2002-02-09  Matthias Clasen  <matthias@local>
+
+       * gtk/gtknotebook.c (gtk_notebook_set_focus_child): Avoid segfault
+       for selectable tab labels (even without a segfault, they make the
+       notebook almost unusable, though).  (#69985)
+
+2002-02-08  Matthias Clasen  <matthias@local>
+
+       * gtk/gtkmenuitem.c (gtk_menu_item_set_accel_path): Silently do 
+       nothing if the parent is not a menu.  (#66492)
+
+2002-02-06  Matthias Clasen  <matthiasc@poet.de>
+
+       * gtk/gtkitemfactory.c (gtk_item_factory_from_widget,
+       gtk_item_factory_path_from_widget): Try fetching the return value 
+       from menu_item->submenu as a fallback.  (#69020)
+       
 Sat Feb  9 22:57:43 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreemodelsort.c (gtk_tree_model_sort_build_level): convert
index f00169ecfc5f99cc43fc5119d9cbd73281ba0c4f..47d8a1525293dc90e28ff8afc54716f508e82a27 100644 (file)
@@ -1,3 +1,20 @@
+2002-02-09  Matthias Clasen  <matthias@local>
+
+       * gtk/gtknotebook.c (gtk_notebook_set_focus_child): Avoid segfault
+       for selectable tab labels (even without a segfault, they make the
+       notebook almost unusable, though).  (#69985)
+
+2002-02-08  Matthias Clasen  <matthias@local>
+
+       * gtk/gtkmenuitem.c (gtk_menu_item_set_accel_path): Silently do 
+       nothing if the parent is not a menu.  (#66492)
+
+2002-02-06  Matthias Clasen  <matthiasc@poet.de>
+
+       * gtk/gtkitemfactory.c (gtk_item_factory_from_widget,
+       gtk_item_factory_path_from_widget): Try fetching the return value 
+       from menu_item->submenu as a fallback.  (#69020)
+       
 Sat Feb  9 22:57:43 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreemodelsort.c (gtk_tree_model_sort_build_level): convert
index f00169ecfc5f99cc43fc5119d9cbd73281ba0c4f..47d8a1525293dc90e28ff8afc54716f508e82a27 100644 (file)
@@ -1,3 +1,20 @@
+2002-02-09  Matthias Clasen  <matthias@local>
+
+       * gtk/gtknotebook.c (gtk_notebook_set_focus_child): Avoid segfault
+       for selectable tab labels (even without a segfault, they make the
+       notebook almost unusable, though).  (#69985)
+
+2002-02-08  Matthias Clasen  <matthias@local>
+
+       * gtk/gtkmenuitem.c (gtk_menu_item_set_accel_path): Silently do 
+       nothing if the parent is not a menu.  (#66492)
+
+2002-02-06  Matthias Clasen  <matthiasc@poet.de>
+
+       * gtk/gtkitemfactory.c (gtk_item_factory_from_widget,
+       gtk_item_factory_path_from_widget): Try fetching the return value 
+       from menu_item->submenu as a fallback.  (#69020)
+       
 Sat Feb  9 22:57:43 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreemodelsort.c (gtk_tree_model_sort_build_level): convert
index f00169ecfc5f99cc43fc5119d9cbd73281ba0c4f..47d8a1525293dc90e28ff8afc54716f508e82a27 100644 (file)
@@ -1,3 +1,20 @@
+2002-02-09  Matthias Clasen  <matthias@local>
+
+       * gtk/gtknotebook.c (gtk_notebook_set_focus_child): Avoid segfault
+       for selectable tab labels (even without a segfault, they make the
+       notebook almost unusable, though).  (#69985)
+
+2002-02-08  Matthias Clasen  <matthias@local>
+
+       * gtk/gtkmenuitem.c (gtk_menu_item_set_accel_path): Silently do 
+       nothing if the parent is not a menu.  (#66492)
+
+2002-02-06  Matthias Clasen  <matthiasc@poet.de>
+
+       * gtk/gtkitemfactory.c (gtk_item_factory_from_widget,
+       gtk_item_factory_path_from_widget): Try fetching the return value 
+       from menu_item->submenu as a fallback.  (#69020)
+       
 Sat Feb  9 22:57:43 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreemodelsort.c (gtk_tree_model_sort_build_level): convert
index f00169ecfc5f99cc43fc5119d9cbd73281ba0c4f..47d8a1525293dc90e28ff8afc54716f508e82a27 100644 (file)
@@ -1,3 +1,20 @@
+2002-02-09  Matthias Clasen  <matthias@local>
+
+       * gtk/gtknotebook.c (gtk_notebook_set_focus_child): Avoid segfault
+       for selectable tab labels (even without a segfault, they make the
+       notebook almost unusable, though).  (#69985)
+
+2002-02-08  Matthias Clasen  <matthias@local>
+
+       * gtk/gtkmenuitem.c (gtk_menu_item_set_accel_path): Silently do 
+       nothing if the parent is not a menu.  (#66492)
+
+2002-02-06  Matthias Clasen  <matthiasc@poet.de>
+
+       * gtk/gtkitemfactory.c (gtk_item_factory_from_widget,
+       gtk_item_factory_path_from_widget): Try fetching the return value 
+       from menu_item->submenu as a fallback.  (#69020)
+       
 Sat Feb  9 22:57:43 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreemodelsort.c (gtk_tree_model_sort_build_level): convert
index 732c514561cd7bcf4ea9d8fdab54fe514213323d..6e61ab5644267654fce3b11382afb0d50bb5334d 100644 (file)
@@ -577,9 +577,19 @@ gtk_item_factory_finalize (GObject *object)
 GtkItemFactory*
 gtk_item_factory_from_widget (GtkWidget               *widget)
 {
+  GtkItemFactory *ifactory;
+
   g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
 
-  return gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_item_factory);
+  ifactory = gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_item_factory);
+  if (ifactory == NULL && GTK_IS_MENU_ITEM (widget) &&
+      GTK_MENU_ITEM (widget)->submenu != NULL) 
+    {
+      GtkWidget *menu = GTK_MENU_ITEM (widget)->submenu;
+      ifactory = gtk_object_get_data_by_id (GTK_OBJECT (menu), quark_item_factory);
+    }
+
+  return ifactory;
 }
 
 /**
@@ -597,9 +607,20 @@ gtk_item_factory_from_widget (GtkWidget           *widget)
 G_CONST_RETURN gchar*
 gtk_item_factory_path_from_widget (GtkWidget       *widget)
 {
+  gchar* path;
+
   g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
 
-  return gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_item_path);
+  path = gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_item_path);
+
+  if (path == NULL && GTK_IS_MENU_ITEM (widget) &&
+      GTK_MENU_ITEM (widget)->submenu != NULL) 
+    {
+      GtkWidget *menu = GTK_MENU_ITEM (widget)->submenu;
+      path = gtk_object_get_data_by_id (GTK_OBJECT (menu), quark_item_path);
+    }
+
+  return path;
 }
 
 /**
index 06a47ed0ff9444aa4ca3d3039ba62f3cb0af6702..6b22ca714be60a6982631ef2daf55998db82ff38 100644 (file)
@@ -1124,7 +1124,7 @@ gtk_menu_item_set_accel_path (GtkMenuItem *menu_item,
   gtk_widget_set_accel_path (widget, NULL, NULL);
 
   /* install accelerators associated with new path */
-  if (widget->parent)
+  if (widget->parent && GTK_IS_MENU (widget->parent))
     {
       GtkMenu *menu = GTK_MENU (widget->parent);
 
index e0872bb8499b37d652d5d92bc06a4d865a6ec7c1..269d796c09b1903fd88f2d0e3a4fbae1084f1dd6 100644 (file)
@@ -2068,7 +2068,7 @@ gtk_notebook_focus (GtkWidget        *widget,
   g_assert_not_reached ();
   return FALSE;
 }  
-  
+
 static void
 gtk_notebook_set_focus_child (GtkContainer *container,
                              GtkWidget    *child)
@@ -2091,15 +2091,18 @@ gtk_notebook_set_focus_child (GtkContainer *container,
          if (page_child->parent == GTK_WIDGET (container))
            {
              GList *list = gtk_notebook_find_child (notebook, page_child, NULL);
-             GtkNotebookPage *page = list->data;
-
-             if (page->last_focus_child)
-               g_object_remove_weak_pointer (G_OBJECT (page->last_focus_child), (gpointer *)&page->last_focus_child);
-               
-             page->last_focus_child = GTK_WINDOW (toplevel)->focus_widget;
-             g_object_add_weak_pointer (G_OBJECT (page->last_focus_child), (gpointer *)&page->last_focus_child);
+             if (list != NULL) 
+               {
+                 GtkNotebookPage *page = list->data;
              
-             break;
+                 if (page->last_focus_child)
+                   g_object_remove_weak_pointer (G_OBJECT (page->last_focus_child), (gpointer *)&page->last_focus_child);
+                 
+                 page->last_focus_child = GTK_WINDOW (toplevel)->focus_widget;
+                 g_object_add_weak_pointer (G_OBJECT (page->last_focus_child), (gpointer *)&page->last_focus_child);
+             
+                 break;
+               }
            }
 
          page_child = page_child->parent;